import js from "@eslint/js";
// import pluginVue from "eslint-plugin-vue";
import * as parserVue from "vue-eslint-parser";
import configPrettier from "eslint-config-prettier";
import pluginPrettier from "eslint-plugin-prettier";
import { defineFlatConfig } from "eslint-define-config";
import * as parserTypeScript from "@typescript-eslint/parser";
import pluginTypeScript from "@typescript-eslint/eslint-plugin";

export default defineFlatConfig([
  // {
  //   ...js.configs.recommended,
  //   ignores: [
  //     "**/.*",
  //     "dist/*",
  //     "*.d.ts",
  //     "public/*",
  //     "src/assets/**",
  //     "src/**/iconfont/**"
  //   ],
  //   languageOptions: {
  //     globals: {
  //       // index.d.ts
  //       RefType: "readonly",
  //       EmitType: "readonly",
  //       TargetContext: "readonly",
  //       ComponentRef: "readonly",
  //       ElRef: "readonly",
  //       ForDataType: "readonly",
  //       AnyFunction: "readonly",
  //       PropType: "readonly",
  //       Writable: "readonly",
  //       Nullable: "readonly",
  //       NonNullable: "readonly",
  //       Recordable: "readonly",
  //       ReadonlyRecordable: "readonly",
  //       Indexable: "readonly",
  //       DeepPartial: "readonly",
  //       Without: "readonly",
  //       Exclusive: "readonly",
  //       TimeoutHandle: "readonly",
  //       IntervalHandle: "readonly",
  //       Effect: "readonly",
  //       ChangeEvent: "readonly",
  //       WheelEvent: "readonly",
  //       ImportMetaEnv: "readonly",
  //       Fn: "readonly",
  //       PromiseFn: "readonly",
  //       ComponentElRef: "readonly",
  //       parseInt: "readonly",
  //       parseFloat: "readonly"
  //     }
  //   },
  //   plugins: {
  //     prettier: pluginPrettier
  //   },
  //   rules: {
  //     ...configPrettier.rules,
  //     ...pluginPrettier.configs.recommended.rules,
  //     "no-debugger": "off",
  //     "no-unused-vars": [
  //       "error",
  //       {
  //         argsIgnorePattern: "^_",
  //         varsIgnorePattern: "^_"
  //       }
  //     ],
  //     "prettier/prettier": [
  //       "error",
  //       {
  //         endOfLine: "auto"
  //       }
  //     ]
  //   }
  // },
  // {
  //   files: ["**/*.?([cm])ts", "**/*.?([cm])tsx"],
  //   languageOptions: {
  //     parser: parserTypeScript,
  //     parserOptions: {
  //       sourceType: "module"
  //     }
  //   },
  //   plugins: {
  //     "@typescript-eslint": pluginTypeScript
  //   },
  //   rules: {
  //     ...pluginTypeScript.configs.strict.rules,
  //     "@typescript-eslint/ban-types": "off",
  //     "@typescript-eslint/no-redeclare": "error",
  //     "@typescript-eslint/ban-ts-comment": "off",
  //     "@typescript-eslint/no-explicit-any": "off",
  //     "@typescript-eslint/prefer-as-const": "warn",
  //     "@typescript-eslint/no-empty-function": "off",
  //     "@typescript-eslint/no-non-null-assertion": "off",
  //     "@typescript-eslint/no-import-type-side-effects": "error",
  //     "@typescript-eslint/explicit-module-boundary-types": "off",
  //     "@typescript-eslint/consistent-type-imports": [
  //       "error",
  //       { disallowTypeAnnotations: false, fixStyle: "inline-type-imports" }
  //     ],
  //     "@typescript-eslint/prefer-literal-enum-member": [
  //       "error",
  //       { allowBitwiseExpressions: true }
  //     ],
  //     "@typescript-eslint/no-unused-vars": [
  //       "error",
  //       {
  //         argsIgnorePattern: "^_",
  //         varsIgnorePattern: "^_"
  //       }
  //     ]
  //   }
  // },
  // {
  //   files: ["**/*.d.ts"],
  //   rules: {
  //     "eslint-comments/no-unlimited-disable": "off",
  //     "import/no-duplicates": "off",
  //     "unused-imports/no-unused-vars": "off"
  //   }
  // },
  // {
  //   files: ["**/*.?([cm])js"],
  //   rules: {
  //     "@typescript-eslint/no-require-imports": "off",
  //     "@typescript-eslint/no-var-requires": "off"
  //   }
  // },
  // {
  //   files: ["**/*.vue"],
  //   languageOptions: {
  //     globals: {
  //       $: "readonly",
  //       $$: "readonly",
  //       $computed: "readonly",
  //       $customRef: "readonly",
  //       $ref: "readonly",
  //       $shallowRef: "readonly",
  //       $toRef: "readonly"
  //     },
  //     parser: parserVue,
  //     parserOptions: {
  //       ecmaFeatures: {
  //         jsx: true
  //       },
  //       extraFileExtensions: [".vue"],
  //       parser: "@typescript-eslint/parser",
  //       sourceType: "module"
  //     }
  //   }
  // plugins: {
  //   // vue: pluginVue
  // },
  // processor: pluginVue.processors[".vue"],
  // rules: {
  //   ...pluginVue.configs.base.rules,
  //   ...pluginVue.configs["vue3-essential"].rules,
  //   ...pluginVue.configs["vue3-recommended"].rules,
  //   "no-undef": "off",
  //   "no-unused-vars": "off",
  //   "vue/no-v-html": "off",
  //   "vue/require-default-prop": "off",
  //   "vue/require-explicit-emits": "off",
  //   "vue/multi-word-component-names": "off",
  //   "vue/no-setup-props-reactivity-loss": "off",
  //   "vue/html-self-closing": [
  //     "error",
  //     {
  //       html: {
  //         void: "always",
  //         normal: "always",
  //         component: "always"
  //       },
  //       svg: "always",
  //       math: "always"
  //     }
  //   ]
  // }
  // }
]);
